﻿package com.zouloux.utils 
{
	import flash.geom.Point;
	/**
	 * ...
	 * @author ZoulouX
	 */
	public class MathUtils
	{
		/**
		 * Convertion d'un angle en degrés vers un angle en radians
		 * @param	pValue : L'angle en degrés
		 * @return	L'angle en radians
		 */
		public static function toRad (pValue:Number):Number
		{
			return pValue / 180 * Math.PI;
		}
		
		
		/**
		 * Convertion d'un angle en radians vers un angle en degrés
		 * @param	pValue : L'angle en radians
		 * @return	L'angle en degrés
		 */
		public static function toDeg (pValue:Number):Number
		{
			return pValue * 180 / Math.PI;
		}
		
		
		/**
		 * Faire un random dans une fourchette, ou une cuillière comme tu le sens
		 * @param	pStart
		 * @param	pEnd
		 * @return	Un random entre pStart et pEnd
		 */
		public static function randomRange (pStart:Number = 0, pEnd:Number = 1):Number
		{
			return pStart + Math.random() * (pStart + pEnd);
		}
		
		/**
		 * Calculer un angle entre 2 points.
		 * @param	pPoint1 : Le point principal
		 * @param	pPoint2 : Le point de référence
		 * @return : L'angle entre les 2 points en degrés
		 */
		public static function calculateAngle (pPoint1:Point, pPoint2:Point = null):Number
		{
			// Si le second point n'éxite pas
			if (pPoint2 == null)
				pPoint2 = new Point();
			
			// Calculer l'angle et retourner
			return -Math.atan2(pPoint1.x - pPoint2.x, pPoint1.y - pPoint2.y) / Math.PI * 180;
		}
		
		/**
		 * Calculer la distance entre 2 points
		 * @param	pPoint1 : Le point principal
		 * @param	pPoint2 : Le point de référence
		 * @return : La distance en pixels entre les 2 points
		 */
		public static function calculateDistance (pPoint1:Point, pPoint2:Point = null):Number
		{
			// Si le second point n'éxite pas
			if (pPoint2 == null)
				pPoint2 = new Point();
			
			// Retourner la distance
			return Point.distance(pPoint1, pPoint2);
		}
	}
}